package com.xiaolin.sports.aliyun.mns;

import java.util.Random;

import com.alibaba.fastjson.JSONObject;
import com.aliyun.mns.client.CloudAccount;
import com.aliyun.mns.client.CloudTopic;
import com.aliyun.mns.client.MNSClient;
import com.aliyun.mns.common.ServiceException;
import com.aliyun.mns.common.utils.ServiceSettings;
import com.aliyun.mns.model.BatchSmsAttributes;
import com.aliyun.mns.model.MessageAttributes;
import com.aliyun.mns.model.RawTopicMessage;
import com.aliyun.mns.model.TopicMessage;

public class SMSMessageUtil {
	
	private static final String SMS_TOPIC = "sms.topic-cn-shenzhen";
	private static String ACCESSKEY="LTAIcqhZbV3T83IR";//需要修改
	private static String ACCESSSECRET="E11b5rwteGj8YlDQ4roMHYZDiRe2c2";//需要修改
	private static String ENDPOINT = "https://1841790594851637.mns.cn-shenzhen.aliyuncs.com/";
	private static String TEMPLATE_CODE="SMS_66630032";//需要修改
	private static String SIGNNAME="小林体育";//需要修改
	
	public static void main(String[] args) {
		int aa = new Random().nextInt(10000);
		System.out.println(aa);
    }
	
	public static TopicMessage sendSms(String phone, String code) {
		TopicMessage ret = null;
		/**
         * Step 1. 获取主题引用
         */
        CloudAccount account = new CloudAccount(
        		ACCESSKEY, 
        		ACCESSSECRET, 
        		ENDPOINT);
        MNSClient client = account.getMNSClient();
        CloudTopic topic = client.getTopicRef(SMS_TOPIC);
        /**
         * Step 2. 设置SMS消息体（必须）
         *
         * 注：目前暂时不支持消息内容为空，需要指定消息内容，不为空即可。
         */
        RawTopicMessage msg = new RawTopicMessage();
        msg.setMessageBody("sms-message");
        /**
         * Step 3. 生成SMS消息属性
         */
        MessageAttributes messageAttributes = new MessageAttributes();
        BatchSmsAttributes batchSmsAttributes = new BatchSmsAttributes();
        // 3.1 设置发送短信的签名（SMSSignName）
        batchSmsAttributes.setFreeSignName(SIGNNAME);
        // 3.2 设置发送短信使用的模板（SMSTempateCode）
        batchSmsAttributes.setTemplateCode(TEMPLATE_CODE);
        // 3.3 设置发送短信所使用的模板中参数对应的值（在短信模板中定义的，没有可以不用设置）
        BatchSmsAttributes.SmsReceiverParams smsReceiverParams = new BatchSmsAttributes.SmsReceiverParams();
        smsReceiverParams.setParam("code", code);
        // 3.4 增加接收短信的号码
        batchSmsAttributes.addSmsReceiver(phone, smsReceiverParams);
        messageAttributes.setBatchSmsAttributes(batchSmsAttributes);
        try {
            /**
             * Step 4. 发布SMS消息
             */
            ret = topic.publishMessage(msg, messageAttributes);
        } catch (ServiceException se) {
            System.out.println(se.getErrorCode() + se.getRequestId());
            System.out.println(se.getMessage());
            se.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
        	client.close();
		}
        return ret;
	}
}
